#ifndef GRINSIM_HEADER_SIMULATORBASE
#define GRINSIM_HEADER_SIMULATORBASE

#include<map>
#include <iostream>
#include <boost/signals2/signal.hpp>
#include <boost/bind.hpp>

#include "AbstractEntity.h"

using namespace std;
class SimulatorBase
{
public:
	SimulatorBase(double, double);
	bool RegisterEntity(AbstractEntity* entity);
	virtual void Run();
	virtual ~SimulatorBase();
	
private:
	SimulatorBase();
	void printSimCreateInfo();
	void printSimDestructorInfo();
	virtual void SendSignal(double);
	double m_timeStep;
	double m_maxTime;
	boost::signals2::signal<void (double)> m_Signal_Dispatcher_Entity;
	map<string,AbstractEntity*> m_EntityMap;
};

#endif GRINSIM_HEADER_SIMULATORBASE